<?php
/**
 * User: ppjun378
 * Data: 2018/10/23
 * Time: 18:00
 */
namespace App\Service;

use App\Model\SmsTemps;
use Qcloud\Sms\SmsSingleSender;

class SmsTempsService
{
    /**
     * 获取验证码
     * @param $request
     * @return mixed
     * @author ppjun378<ppjun378@foxmail.com>
     */
    public static function getQrCode($request)
    {

        // 获取手机号码
        $mobile_phone = $request->input('mobile_phone', '');
        // 获取验证码
        $qr_code = mt_rand(100000, 999999);

        // 短信应用SDK AppID
        $appid = 1400176143; // 1400开头

        // 短信应用SDK AppKey
        $appkey = "79244c3768e81595e5bc79cd88233074";

        // 需要发送短信的手机号码
        $phoneNumbers = [$mobile_phone];
        //templateId7839对应的内容是"您的验证码是: {1}"
        // 短信模板ID，需要在短信应用中申请
        $templateId = 257975; // NOTE: 这里的模板ID`7839`只是一个示例，真实的模板ID需要在短信控制台中申请

        $smsSign = "188561"; // NOTE: 这里的签名只是示例，请使用真实的已申请的签名，签名参数使用的是`签名内容`，而不是`签名ID`

        try {
            $ssender = new SmsSingleSender($appid, $appkey);
            $params = [$qr_code, "10"]; //数组具体的元素个数和模板中变量个数必须一致，例如事例中 templateId:5678对应一个变量，参数数组中元素个数也必须是一个
            $result = $ssender->sendWithParam("86", $phoneNumbers[0], $templateId,
                $params, "", ""); // 签名参数未提供或者为空时，会使用默认签名发送短信
            $rsp = json_decode($result);

            $result = Self::save($mobile_phone, $qr_code);

            if ($result) {
                $list['code'] = 0;
                $list['msg'] = 'success';
                // $list['data'] = ['qr_code' => $qr_code];
                return $list;
            }

        } catch (\Exception $e) {
            echo var_dump($e);
        }

    }

    /**
     * 保存验证码
     * @param $request
     * @return mixed
     * @author ppjun378 <ppjun378@foxmail.com>
     */
    public static function save($mobile_phone, $qr_code)
    {
        $data_exist = SmsTemps::where('mobile_phone', $mobile_phone)->first();
        if ($mobile_phone && $data_exist) {
            $result = SmsTemps::where('mobile_phone', $mobile_phone)->update(['qr_code' => $qr_code]);
        } else {
            $map['mobile_phone'] = $mobile_phone;
            $map['qr_code'] = $qr_code;
            $result = SmsTemps::create($map);
        }
        return $result;

    }

    /**
     * 检测验证码
     * @param $request
     * @return mixed
     * @author ppjun378 <ppjun378@foxmail.com>
     */
    public static function checkCode($mobile_phone, $qr_code)
    {
        $map['mobile_phone'] = $mobile_phone;
        $map['qr_code'] = $qr_code;
        $data_exist = SmsTemps::where($map)->first();

        // 判断验证码是否正确
        if (!empty($data_exist)) {
            return 1; // 验证码正确
        } else {
            return 0; // 验证码错误
        }

    }

}
